//
//  SQLManager.swift
//  Swift-fmdb
//
//  Created by 王炯 on 16/8/2.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit

//定义一个数据库管理类，实现数据库信息的增，删，改，查功能
// 数据库名称
private let dbName = "weibo.db"
class SQLManager: NSObject
{

    // 全局访问点
    static let sharedTools:SQLManager = SQLManager()
    
    //Swift中使用FMDatabaseQueue对象来执行数据库的相关操作(类似于OC中的FMDatabase对象)
    let queue: FMDatabaseQueue
    
    
    
    //重写init()方法，在初始化对象的时候就开始创建数据库和表
    override init()
    {
        
        //(1)路径
        let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent(dbName)
       
        
        
        
        //利用path来实例化queue对象
        // （创建数据库 或者打开打开数据）
        /*
         -如果已经有数据库 打开数据库
         -如果没有数据库 创建一个数据库 并打开
         - 注意 数据库一经打开 不在关闭
         */
        // 核心对象
        queue = FMDatabaseQueue(path: path)
        
        //(2)实例化数据库的queue一定要在调用父类init()方法之前！！！！
        super.init()
        
        //(3)在数据库内创建表
        setUpTable()
    }
    
    
    //0_在数据库内创建表
    func setUpTable()
    {
        //(1)获取创建表的sql语句的路径
        let file = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)!
    
        //(2)将数据库文件中的语句转化成普通字符
        let sql = try! String(contentsOfFile: file)
        
        //(3)执行sql，创建表
        queue.inDatabase { (db) in
            
            let result = db.executeStatements(sql)
            
            if result
            {
                print("创建表成功")
            }
            else
            {
                print("创建表失败")
            }
        }
        
    }
    
    
    //1-定义数据查询公共方法
    //类似于将数据库表格形式的数据转换成普通的字典数组
    func SelectedRecord(sql:String) -> [[String:AnyObject]]
    {
        //(1)定义一个空字典数组
        var tempDictArray:[[String:AnyObject]] = [[String:AnyObject]]()
        
        
        //(2)按照传入来的sql语句查询
        queue.inDatabase { (db) in
            
            //返回查询的resultSet(符合查询条件的一个集合)
            let resultSet = db.executeQuery(sql, withArgumentsInArray: nil)
            
            
            //遍历resultSet,一条一条数据地查询
            while resultSet.next()
            {
                //定义可变字典
                var dict:[String: AnyObject] = [String: AnyObject]()
                
                //一列一列地获取数据到字典里(key值为每一列名，value为所对应的值)
                for i in 0..<resultSet.columnCount()
                {
                    let key = resultSet.columnNameForIndex(i)
                    let value = resultSet.objectForColumnIndex(i)
                    dict[key] = value
                }
                
                tempDictArray.append(dict)
                
            }
            
        }
        
        return tempDictArray
    }
}
